package com.Maykk.Demo03;

import com.Maykk.Demo02.Eatable;

/**
 * @ClassName: DemoTest
 * @Description: TODO 测试类
 * -- 省略模式 --
 * - 参数的类型可以省略
 * - 如果参数有且仅有一个，小括号可以省略不写
 * - 如果代码块的语句只有一条，可以省略大括号和分号（如果有 return 则 return 需要一同删掉）
 * @Author: MaykkStar@163.com
 */
public class DemoTest {
    public static void main(String[] args) {
        // 通过匿名内部类
        runEat(new Eatable() {
            @Override
            public void eat(String food) {
                System.out.println("早上吃 " + food);
            }
        });

        // 通过 Lambda 完整形式
        runEat((String food) -> {
            System.out.println("中午吃 " + food);
        });

        // 通过 Lambda 省略形式
        runEat(food -> System.out.println("晚上吃 " + food));

        System.out.println("==================================================");
        // 匿名内部类形式
        computer(new Computable() {
            @Override
            public int computer(Integer a, Integer b) {
                return a - b;
            }
        });
        // 完整 Lambda
        computer((Integer a, Integer b) -> {
            return a + b;
        });

        // 省略 Lambda
        computer((a, b) -> a * b);

    }

    public static void runEat(Eatable e) {
        e.eat("麻辣烫");
    }

    public static void computer(Computable com) {
        int res = com.computer(7, 8);
        System.out.println("res = " + res);
    }
}
